home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 6 / The Arsenal Files 6 (Arsenal Computer).ISO / dosutils / sense13b.zip / SENSETSR.ASM < prev    next >
Assembly Source File  |  1996-02-17  |  15KB  |  396 lines

  1. ;┌───────────────────────────────────────────────────────────────────────────┐
  2. ;│Mouse sensitivity switcher (SenseTSR v1.3b) Copyright (c) 1996 by Virtuoso.│
  3. ;│                                                                           │
  4. ;│  20/01/96 (1.0a) - implementation.                                        │
  5. ;│  28/01/96 (1.1b) - rewrite as it didn't work with SIRDOOM :(              │
  6. ;│  30/01/96 (1.1c) - added new coding for detecting the pressing of our     │
  7. ;│                    keys, checked for a mouse driver, cosmetic changes!    │
  8. ;│  06/02/96 (1.2c) - added new coding for redefining our keys.              │
  9. ;│  17/02/96 (1.3b) - added new coding so as to only look at the keyboard    │
  10. ;│                    every ½ second, cosmetic changes! also i've changed    │
  11. ;│                    the default sensitivity values.                        │
  12. ;└───────────────────────────────────────────────────────────────────────────┘
  13.  
  14. MultiplexID             equ     0C0h ; our multiplex id
  15. InstallCheck            equ     0FFh ; installation check function
  16.  
  17. GetTablePtr             equ     0FEh ; get table ptr function
  18. SetIncreaseKey          equ     0FDh ; set the increase key
  19. SetDecreaseKey          equ     0FCh ; set the decrease key
  20.  
  21. MaxSensitivityLevel     equ     9 ; max no of sensitivity levels
  22.  
  23.                         .286
  24.                         .model  tiny
  25.                         .code
  26.  
  27. Start:
  28.                         jmp     Install
  29.  
  30. SavedInt1C              dw      0, 0
  31. SavedInt2F              dw      0, 0
  32. SavedInt33              dw      0, 0
  33.  
  34. SavedAX                 dw      0
  35. SavedBX                 dw      0
  36. SavedCX                 dw      0
  37. SavedDX                 dw      0
  38. SavedSI                 dw      0
  39. SavedDI                 dw      0
  40. SavedBP                 dw      0
  41. SavedDS                 dw      0
  42. SavedES                 dw      0
  43.  
  44. ; SetSense assumes that from here...
  45.  
  46. SensitivityLevel        db      7
  47. SensitivityTable        db      15, 15, 20, 20, 25, 25
  48.                         db      30, 30, 35, 35, 40, 40
  49.                         db      45, 45, 50, 50, 55, 55
  50.  
  51. IncreaseKey             db      73 ; PageUp
  52. DecreaseKey             db      81 ; PageDown
  53.  
  54. ; to here is all one area of memory (it makes references from the start).
  55.  
  56. SoundDelay              db      0
  57. SoundTable              dw      9121, 8609, 8126
  58.                         dw      7670, 7239, 6833
  59.                         dw      6449, 6087, 5746
  60.  
  61. IncreasePressed         db      0
  62. SensitivityIncreased    db      0
  63. DecreasePressed         db      0
  64. SensitivityDecreased    db      0
  65.  
  66. KeyboardCheckingDelay   db      0
  67. ;
  68. SaveRegisters:
  69.                         mov     cs:[SavedAX], ax
  70.                         mov     cs:[SavedBX], bx
  71.                         mov     cs:[SavedCX], cx
  72.                         mov     cs:[SavedDX], dx
  73.                         mov     cs:[SavedSI], si
  74.                         mov     cs:[SavedDI], di
  75.                         mov     cs:[SavedBP], bp
  76.                         mov     cs:[SavedDS], ds
  77.                         mov     cs:[SavedES], es
  78.                         ret
  79. ;
  80. LoadRegisters:
  81.                         mov     ax, cs:[SavedAX]
  82.                         mov     bx, cs:[SavedBX]
  83.                         mov     cx, cs:[SavedCX]
  84.                         mov     dx, cs:[SavedDX]
  85.                         mov     si, cs:[SavedSI]
  86.                         mov     di, cs:[SavedDI]
  87.                         mov     bp, cs:[SavedBP]
  88.                         mov     ds, cs:[SavedDS]
  89.                         mov     es, cs:[SavedES]
  90.                         ret
  91. ;
  92. IncreaseSensitivity:
  93.                         call    SaveRegisters
  94.  
  95.                         cmp     cs:[SensitivityLevel], MaxSensitivityLevel
  96.                         jnz     @@MaxNotReached
  97.                         jmp     @@MaxWasReached
  98. @@MaxNotReached:
  99.                         inc     cs:[SensitivityLevel]
  100.                         call    SetSensitivityLevel
  101. @@MaxWasReached:
  102.                         call    LoadRegisters
  103.  
  104.                         ret
  105. ;
  106. DecreaseSensitivity:
  107.                         call    SaveRegisters
  108.  
  109.                         cmp     cs:[SensitivityLevel], 1
  110.                         jg      @@MinNotReached
  111.                         jmp     @@MinWasReached
  112. @@MinNotReached:
  113.                         dec     cs:[SensitivityLevel]
  114.                         call    SetSensitivityLevel
  115. @@MinWasReached:
  116.                         call    LoadRegisters
  117.                         ret
  118. ;
  119. SetSensitivityLevel:
  120.                         xor     ah, ah
  121.                         mov     al, cs:[SensitivityLevel]
  122.                         dec     al
  123.                         shl     al, 1
  124.  
  125.                         mov     bx, offset SoundTable
  126.                         add     ax, bx
  127.                         mov     bp, ax
  128.  
  129.                         mov     bx, cs:[bp]
  130.                         mov     cl, 2
  131.  
  132.                         call    SensitivitySound
  133.  
  134.                         mov     ax, 0001Bh
  135.                         pushf
  136.                         call    dword ptr cs:[SavedInt33]
  137.  
  138.                         xor     ah, ah
  139.                         mov     al, cs:[SensitivityLevel]
  140.                         dec     al
  141.                         shl     al, 1
  142.  
  143.                         mov     bx, offset SensitivityTable
  144.                         add     ax, bx
  145.                         mov     bp, ax
  146.  
  147.                         xor     bh, bh
  148.                         xor     ch, ch
  149.                         mov     bl, cs:[bp]
  150.                         mov     cl, cs:[bp+1]
  151.  
  152.                         mov     ax, 0001Ah
  153.                         pushf
  154.                         call    dword ptr cs:[SavedInt33]
  155.  
  156.                         ret
  157. ;
  158. SensitivitySound:
  159.                         mov     al, 0B6h
  160.                         out     043h, al
  161.  
  162.                         mov     al, bl
  163.                         out     042h, al
  164.                         mov     al, bh
  165.                         out     042h, al
  166.  
  167.                         in      al, 061h
  168.                         or      al, 00000011b
  169.                         out     061h, al
  170.  
  171.                         mov     cs:[SoundDelay], cl
  172. @@SoundDelay:
  173.                         cmp     cs:[SoundDelay], 0
  174.                         jnz     @@SoundDelay
  175.                                                                         
  176.                         in      al, 061h
  177.                         and     al, 11111100b
  178.                         out     061h, al
  179.  
  180.                         ret
  181. ;
  182. NewInt1C:
  183.                         push    ax
  184.                         sti
  185.  
  186.                         cmp     cs:[SoundDelay], 0
  187.                         jz      @@NoSound
  188.  
  189.                         dec     cs:[SoundDelay]
  190. @@NoSound:
  191.                         inc     cs:[KeyboardCheckingDelay]
  192.                         cmp     cs:[KeyboardCheckingDelay], 9
  193.                         jnz     @@Int1CEnd
  194.  
  195.                         mov     cs:[KeyboardCheckingDelay], 0
  196.  
  197.                         cmp     cs:[SensitivityIncreased], 0
  198.                         jnz     @@Int1CEnd
  199.                         cmp     cs:[SensitivityDecreased], 0
  200.                         jnz     @@Int1CEnd
  201.  
  202.                         in      al, 060h
  203.                         cmp     al, cs:[IncreaseKey]
  204.                         jz      @@IncreaseHit
  205.                         cmp     al, cs:[DecreaseKey]
  206.                         jz      @@DecreaseHit
  207.                         jmp     @@Int1CEnd
  208. @@IncreaseHit:
  209.                         mov     cs:[SensitivityIncreased], 1
  210.                         jmp     @@Int1CEnd
  211. @@DecreaseHit:
  212.                         mov     cs:[SensitivityDecreased], 1
  213. @@Int1CEnd:
  214.                         pop     ax
  215.                         jmp     dword ptr cs:[SavedInt1C]
  216.  
  217. ;
  218. NewInt2F:
  219.                         cmp     ah, MultiplexID
  220.                         jz      @@OurMultiplexID
  221.  
  222.                         jmp     dword ptr cs:[SavedInt2F]
  223. @@OurMultiplexID:
  224.                         cmp     al, InstallCheck
  225.                         jz      @@InstallCheck
  226.                         cmp     al, GetTablePtr
  227.                         jz      @@GetTablePtr
  228.                         cmp     al, SetIncreaseKey
  229.                         jz      @@SetIncreaseKey
  230.                         cmp     al, SetDecreaseKey
  231.                         jz      @@SetDecreaseKey
  232.  
  233.                         jmp     dword ptr cs:[SavedInt2F]
  234. @@InstallCheck:
  235.                         xchg    ah, al
  236.                         mov     dx, seg Message
  237.                         mov     es, dx
  238.                         mov     si, offset Message
  239.                         jmp     @@Int2FEnd
  240. @@GetTablePtr:
  241.                         mov     dx, seg SensitivityTable
  242.                         mov     ds, dx
  243.                         mov     dx, offset SensitivityTable
  244.                         jmp     @@Int2FEnd
  245. @@SetIncreaseKey:
  246.                         mov     cs:[IncreaseKey], cl
  247.                         jmp     @@Int2FEnd
  248. @@SetDecreaseKey:
  249.                         mov     cs:[DecreaseKey], cl
  250. @@Int2FEnd:
  251.                         iret
  252. ;
  253. NewInt33:
  254.                         cmp     ax, 00003h
  255.                         jz      @@ChangedSensitivity
  256.  
  257.                         jmp     dword ptr cs:[SavedInt33]
  258. @@ChangedSensitivity:
  259.                         cmp     cs:[SensitivityIncreased], 1
  260.                         jz      @@IncreaseDown
  261.                         cmp     cs:[SensitivityDecreased], 1
  262.                         jz      @@DecreaseDown
  263.                         jmp     @@Int33End
  264. @@IncreaseDown:
  265.                         sti
  266.                         dec     cs:[SensitivityIncreased]
  267.                         call    IncreaseSensitivity
  268.                         jmp     @@Int33End
  269. @@DecreaseDown:
  270.                         sti
  271.                         dec     cs:[SensitivityDecreased]
  272.                         call    DecreaseSensitivity
  273.                         jmp     @@Int33End
  274. @@Int33End:
  275.                         jmp     dword ptr cs:[SavedInt33]
  276. ;
  277. Install:
  278.                         mov     ah, 009h
  279.                         mov     dx, seg Message
  280.                         mov     ds, dx
  281.                         mov     dx, offset Message
  282.                         int     021h
  283.  
  284.                         xor     ax, ax
  285.                         int     033h
  286.  
  287.                         cmp     AX, 0FFFFh
  288.                         jz      @@MouseDriverInstalled
  289.  
  290.                         mov     ah, 009h
  291.                         mov     dx, seg NoMouseDriver
  292.                         mov     ds, dx
  293.                         mov     dx, offset NoMouseDriver
  294.                         int     021h
  295.  
  296.                         mov     ax, 04C01h
  297.                         int     021h
  298. @@MouseDriverInstalled:
  299.                         mov     ah, MultiplexID
  300.                         mov     al, InstallCheck
  301.                         int     02Fh
  302.  
  303.                         cmp     ah, InstallCheck
  304.                         jnz     @@NotInstalled
  305.                         cmp     al, MultiplexID
  306.                         jnz     @@NotInstalled
  307.  
  308.                         mov     cx, 26
  309.                         mov     ax, seg Message
  310.                         mov     ds, ax
  311.                         mov     di, offset Message
  312. @@CheckForMessage:
  313.                         mov     ah, es:[si]
  314.                         mov     al, ds:[di]
  315.                         cmp     ah, al
  316.                         jnz     @@NotInstalled
  317.                         inc     bx
  318.                         inc     dx
  319.                         loopnz  @@CheckForMessage
  320.  
  321.                         mov     ah, 009h
  322.                         mov     dx, seg AlreadyInstalled
  323.                         mov     ds, dx
  324.                         mov     dx, offset AlreadyInstalled
  325.                         int     021h
  326.  
  327.                         mov     ax, 04C01h
  328.                         int     021h
  329. @@NotInstalled:
  330.                         mov     ax, 0351Ch
  331.                         int     021h
  332.                         mov     cs:[SavedInt1C], BX
  333.                         mov     cs:[SavedInt1C+2], ES
  334.  
  335.                         mov     ax, 0251Ch
  336.                         mov     dx, seg NewInt1C
  337.                         mov     ds, dx
  338.                         mov     dx, offset NewInt1C
  339.                         int     021h
  340.  
  341.                         mov     ax, 0352Fh
  342.                         int     021h
  343.                         mov     cs:[SavedInt2F], BX
  344.                         mov     cs:[SavedInt2F+2], ES
  345.  
  346.                         mov     ax, 0252Fh
  347.                         mov     dx, seg NewInt2F
  348.                         mov     ds, dx
  349.                         mov     dx, offset NewInt2F
  350.                         int     021h
  351.         
  352.                         mov     ax, 03533h
  353.                         int     021h
  354.                         mov     cs:[SavedInt33], BX
  355.                         mov     cs:[SavedInt33+2], ES
  356.  
  357.                         mov     ax, 02533h
  358.                         mov     dx, seg NewInt33
  359.                         mov     ds, dx
  360.                         mov     dx, offset NewInt33
  361.                         int     021h
  362.  
  363.                         mov     ah, 009h
  364.                         mov     dx, seg Installed
  365.                         mov     ds, dx
  366.                         mov     dx, offset Installed
  367.                         int     021h
  368.  
  369.                         call    SetSensitivityLevel
  370.  
  371.                         ; dunno why this doesn't work out the exact
  372.                         ; paragraphs so if you do then please tell me!
  373.  
  374.                 mov     dx, offset Install
  375.                         add     dx, 15
  376.                         shr     dx, 4
  377.  
  378.                         add     dx, dx ; double the paras to make sure :)
  379.  
  380.                         mov     ax, 03100h
  381.                         int     021h
  382.  
  383. Message                 db      'Mouse sensitivity switcher (SenseTSR v1.3b)'
  384.                         db      ', Copyright (c) 1996 by Virtuoso.'
  385.                         db      00Ah, 00Dh
  386.                         db      'Use PgUp/PgDn (default keys) to switch '
  387.                         db      'between the nine levels of sensitivity.'
  388.                         db      00Ah, 00Dh, 00Ah, '$'
  389.  
  390. NoMouseDriver           db      'Mouse driver is not installed!', 00Ah, 00Dh, '$'
  391.  
  392. Installed               db      'Installed.', 00Ah, 00Dh, '$'
  393. AlreadyInstalled        db      'Already installed!', 00Ah, 00Dh, '$'
  394.  
  395.                         end     Start
  396.